package SpeicherModel;

import java.util.Set;
import java.util.TreeSet;

public class Lehrer implements Comparable {

    private String name;
    private String id;
    private int sollStunden;
    private static Set<Lehrer> alleLehrer = new TreeSet<Lehrer>();

    /**
     * Konstruiert den Lehrer mit den Werten name, id und sollStunden
     * @param name
     * @param id
     * @param sollStunden
     */
    private Lehrer(String name, String id, int sollStunden) {
        this.name = name;
        this.id = id;
        this.sollStunden = sollStunden;
    }

    /**
     * Konstruiert den Lehrer mit leeren Werten
     */
    private Lehrer() {
        this("Unbekannt", "NN", 0);
    }

    /**
     * Liefert ein Lehrerobjekt. Wenn die id unbekannt wird ein neues Objekt angelegt.
     * Falls die id bereits bekannt ist, dann werden name und sollStunden aktualisiert.
     * @param name
     * @param id
     * @param sollStunden
     * @return
     */
    public static Lehrer createLehrer(String name, String id, int sollStunden) {
        Lehrer nl = new Lehrer();
        nl.id = id.toUpperCase();
        if (alleLehrer.contains(nl)) {
            for (Lehrer l : alleLehrer) {
                if (l.equals(nl)) {
                    nl = l;
                    break;
                }
                nl.name = name;
                nl.sollStunden = sollStunden;
            }
        } else {
            nl.name = name;
            nl.sollStunden = sollStunden;
            alleLehrer.add(nl);
        }
        return nl;
    }

    public static Set<Lehrer> getAlleLehrer() {
        return alleLehrer;
    }

    /**
     * Gibt die sollStunden zurück
     * @return
     */
    public int getSollStunden() {
        return sollStunden;
    }

    /**
     * Legt die SollStunden fest
     * @param sollStunden
     */
    public void setSollStunden(int sollStunden) {
        this.sollStunden = sollStunden;
    }

    /**
     * Gibt den Kürzel des Lehrers und seine Sollstunden aus
     * @return
     */
    @Override
    public String toString() {
        return id;
    }

    @Override
    public boolean equals(Object o) {
        Lehrer l = (Lehrer) o;
        return this.id.equals(l.id);
    }

    @Override
    public int hashCode() {
        return this.id.hashCode();
    }

    public int compareTo(Object o) {
        Lehrer l = (Lehrer) o;
        return this.id.compareTo(l.id);
    }
}
